#include <QApplication>      // 应用程序类，Qt 主入口
#include <QListWidget>       // 左侧菜单列表控件
#include <QStackedWidget>    // 右侧堆叠页面控件
#include <QLabel>            // 用于显示文本的标签
#include <QHBoxLayout>       // 水平布局器（左右结构）
#include <QVBoxLayout>       // 垂直布局器（用于每页内容）
#include <QWidget>           // 所有控件的基类
/*
 * ## 2.设置面板（搭配左侧菜单）
   用途：左侧 QListWidget / QTreeWidget 做导航，右侧内容随之切换。
    左边菜单选项：系统、账户、安全、更新
    右边堆叠页面内容随菜单项变化更新
📌 Qt Designer 里经常这么做：左边 QListWidget、右边 QStackedWidget。

### 说明
    QListWidget：左边菜单，用于导航
    QStackedWidget：右边内容堆叠区域，一次显示一个页面
    connect(menuList, &QListWidget::currentRowChanged, stack, &QStackedWidget::setCurrentIndex);
    左侧菜单切换，自动更新右侧显示页面
 *
 * */
int main(int argc, char *argv[]) {
    QApplication app(argc, argv); // 初始化 Qt 应用

    // ====================== 主窗口设置 ======================
    QWidget *mainWindow = new QWidget;               // 创建主窗口部件
    mainWindow->setWindowTitle("设置面板示例");      // 设置窗口标题
    mainWindow->resize(600, 400);                    // 设置初始窗口大小

    // ====================== 左侧菜单列表 ======================
    QListWidget *menuList = new QListWidget;         // 创建菜单列表控件
    menuList->addItem("系统");                        // 添加菜单项“系统”
    menuList->addItem("账户");                        // 添加菜单项“账户”
    menuList->addItem("安全");                        // 添加菜单项“安全”
    menuList->addItem("更新");                        // 添加菜单项“更新”
    menuList->setFixedWidth(120);                    // 固定宽度
    menuList->setCurrentRow(0);                      // 默认选中第一个菜单项

    // ====================== 右侧堆叠页面 ======================
    QStackedWidget *stack = new QStackedWidget;      // 创建堆叠部件，用于显示页面

    // ---------- 系统设置页面 ----------
    QWidget *systemPage = new QWidget;               // 创建页面部件
    QVBoxLayout *systemLayout = new QVBoxLayout;     // 创建垂直布局器
    systemLayout->addWidget(new QLabel("系统设置内容...")); // 添加内容标签
    systemPage->setLayout(systemLayout);             // 应用布局到页面

    // ---------- 账户设置页面 ----------
    QWidget *accountPage = new QWidget;
    QVBoxLayout *accountLayout = new QVBoxLayout;
    accountLayout->addWidget(new QLabel("账户设置内容..."));
    accountPage->setLayout(accountLayout);

    // ---------- 安全设置页面 ----------
    QWidget *securityPage = new QWidget;
    QVBoxLayout *securityLayout = new QVBoxLayout;
    securityLayout->addWidget(new QLabel("安全设置内容..."));
    securityPage->setLayout(securityLayout);

    // ---------- 更新设置页面 ----------
    QWidget *updatePage = new QWidget;
    QVBoxLayout *updateLayout = new QVBoxLayout;
    updateLayout->addWidget(new QLabel("更新设置内容..."));
    updatePage->setLayout(updateLayout);

    // ---------- 将页面添加到 QStackedWidget ----------
    stack->addWidget(systemPage);    // 索引 0：系统
    stack->addWidget(accountPage);   // 索引 1：账户
    stack->addWidget(securityPage);  // 索引 2：安全
    stack->addWidget(updatePage);    // 索引 3：更新

    // ====================== 主布局：左右结构 ======================
    QHBoxLayout *mainLayout = new QHBoxLayout;       // 创建主水平布局
    mainLayout->addWidget(menuList);                 // 左边放菜单
    mainLayout->addWidget(stack);                    // 右边放页面区域

    mainWindow->setLayout(mainLayout);               // 应用主布局到窗口
    mainWindow->show();                              // 显示主窗口

    // ====================== 信号槽连接 ======================
    // 当左侧菜单选择变化时，右侧页面切换到对应索引
    QObject::connect(menuList, &QListWidget::currentRowChanged,
                     stack, &QStackedWidget::setCurrentIndex);

    return app.exec();  // 启动事件循环
}
